from PublicReference.base import *

class 归元·街霸·男主动技能(主动技能):
    中毒基础 = 0
    中毒成长 = 0
    中毒倍率 = 1
    出血基础 = 0
    出血成长 = 0
    出血倍率 = 1
    灼伤基础 = 0
    灼伤成长 = 0
    灼伤倍率 = 1
    感电基础 = 0
    感电成长 = 0
    感电倍率 = 1
    基础2 = 0
    成长2 = 0
    攻击次数2 = 0

    def 等效百分比(self, 武器类型):
        if self.等级 == 0:
            return 0
        else:
            return int((self.攻击次数 * (self.基础 + self.成长 * self.等级)
                 + self.攻击次数2 * (self.基础2 + self.成长2 * self.等级)
                 + self.中毒倍率 * (self.中毒基础 + self.中毒成长 * self.等级)
                 + self.出血倍率 * (self.出血基础 + self.出血成长 * self.等级) 
                 + self.灼伤倍率 * (self.灼伤基础 + self.灼伤成长 * self.等级) 
                 + self.感电倍率 * (self.感电基础 + self.感电成长 * self.等级))
                 * (1 + self.TP成长 * self.TP等级) * self.倍率)

    def 等效CD(self, 武器类型,输出类型):
        return round(self.CD  / self.恢复, 1)

class 归元·街霸·男技能0(被动技能):
    名称 = '基础精通'
    倍率 = 1.0
    所在等级 = 1
    等级上限 = 200
    基础等级 = 100
    关联技能 = ['罗网投掷']
    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(self.倍率 * (0.463 + 0.089 * self.等级), 5)

class 归元·街霸·男技能1(归元·街霸·男主动技能):
    名称 = '抛沙'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 46
    基础 = 751
    成长 = 108
    倍率 = 1.5 #后街战术
    CD = 3.1
    TP成长 = 0.08
    TP上限 = 5

class 归元·街霸·男技能2(归元·街霸·男主动技能):
    名称 = '毒瓶投掷'
    所在等级 = 15
    等级上限 = 60
    基础等级 = 31
    基础 = 228 * 1.6  # 后街，下同
    成长 = 54 * 1.6
    中毒基础 = 232
    中毒成长 = 57
    灼烧基础 = 232
    灼烧成长 = 57
    CD = 2.0
    TP成长 = 0.10
    TP上限 = 5

class 归元·街霸·男技能3(归元·街霸·男主动技能):
    名称 = '擒月炎'
    所在等级 = 20
    等级上限 = 60
    基础等级 = 43
    基础 = 2003
    成长 = 216
    CD = 5.8
    TP成长 = 0.10
    TP上限 = 5

class 归元·街霸·男技能4(被动技能):
    名称 = '爪精通'
    所在等级 = 25
    等级上限 = 30
    基础等级 = 20

    def 加成倍率(self, 武器类型):
        return (1.31 + (self.等级 - 20) * 0.02) if self.等级 >= 20 else (1.11 + self.等级 * 0.01)

    def 物理攻击力倍率(self, 武器类型):
        return (1.31 + (self.等级 - 20) * 0.02) if self.等级 >= 20 else (1.11 + self.等级 * 0.01)

    def 魔法攻击力倍率(self, 武器类型):
        return (1.31 + (self.等级 - 20) * 0.02) if self.等级 >= 20 else (1.11 + self.等级 * 0.01)

class 归元·街霸·男技能5(归元·街霸·男主动技能):
    名称 = '毒针投掷'
    所在等级 = 25
    等级上限 = 60
    基础等级 = 41
    基础 = 303 * 1.9  # 后街，下同
    成长 = 29 * 1.9
    感电基础 = 236
    感电成长 = 26
    CD = 3
    TP成长 = 0.10
    TP上限 = 5


class 归元·街霸·男技能6(归元·街霸·男主动技能):
    名称 = '砖块投掷'
    所在等级 = 30
    等级上限 = 60
    基础等级 = 38
    基础 = 1200
    成长 = 126
    基础2 = 1972
    成长2 = 228
    倍率 = 1.6 #后街战术
    CD = 4.0
    TP成长 = 0.10
    TP上限 = 5


class 归元·街霸·男技能7(归元·街霸·男主动技能):
    名称 = '伏虎霸王拳'
    所在等级 = 30
    等级上限 = 60
    基础等级 = 38
    基础 = 1200
    成长 = 128
    倍率 = 1.6 #异常状态
    CD = 15.7
    TP成长 = 0.10
    TP上限 = 5

class 归元·街霸·男技能8(归元·街霸·男主动技能):
    名称 = '挑衅'
    所在等级 = 35
    等级上限 = 20
    基础等级 = 10
    是否有伤害 = 0
    关联技能 = ['所有']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.05 + 0.02 * self.等级, 5)

class 归元·街霸·男技能9(归元·街霸·男主动技能):
    名称 = '螺旋滑铲'
    所在等级 = 35
    等级上限 = 60
    基础等级 = 36
    倍率 = 1.2 #无法抓取
    基础 = 2758
    成长 = 318
    攻击次数 = 3
    CD = 21
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, x):
        if x == 0:
            self.攻击次数 = 1
            self.倍率 *= 3.62
            self.CD *= 0.9
        elif x == 1:
            self.攻击次数 = 1
            self.倍率 *= 3.89
            self.CD *= 0.9


class 归元·街霸·男技能10(归元·街霸·男主动技能):
    名称 = '罗网投掷'
    所在等级 = 35
    等级上限 = 11
    基础等级 = 1
    基础 = 1381
    成长 = 159
    CD = 15
    TP成长 = 0.10
    TP上限 = 3


class 归元·街霸·男技能11(归元·街霸·男主动技能):
    名称 = '毒雷引爆'
    所在等级 = 40
    等级上限 = 60
    基础等级 = 33
    基础 = 6823
    成长 = 775
    攻击次数 = 1
    基础2 = 3535
    成长2 = 393
    攻击次数2 = 1
    中毒基础 = 1682
    中毒成长 = 196
    CD = 25.2
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, x):
        if x == 0:
            self.基础2 = 0
            self.成长2 = 0
            self.倍率 *= 3
            self.基础 *= 0.52
            self.成长 *= 0.52
            self.中毒基础 *= 0.87
            self.中毒成长 *= 0.87
        elif x == 1:
            self.基础2 = 0
            self.成长2 = 0
            self.倍率 *= 3
            self.基础 *= 0.52
            self.成长 *= 0.52
            self.中毒基础 *= 1.08
            self.中毒成长 *= 1.08


class 归元·街霸·男技能12(被动技能):
    名称 = '狂·霸王拳'
    所在等级 = 40
    等级上限 = 11
    基础等级 = 1
    关联技能 = ['伏虎霸王拳']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(6.18 + 0.12 * self.等级, 5)



class 归元·街霸·男技能13(归元·街霸·男主动技能):
    名称 = '血色风暴'
    所在等级 = 45
    等级上限 = 60
    基础等级 = 31
    基础 = 8800
    成长 = 990
    出血基础 = 8800
    出血成长 = 990
    CD = 47.2
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, x):
        if x == 0:
            self.倍率 *= 1.199
        elif x == 1:
            self.倍率 *= 1.276


class 归元·街霸·男技能14(被动技能):
    名称 = '千手奥义'
    所在等级 = 48
    等级上限 = 40
    基础等级 = 20
    关联技能 = ['血色风暴','天崩地裂','爆破污桶','千锁乱舞']
    关联技能2 = ['抛沙','毒瓶投掷','毒针投掷','擒月炎','砖块投掷','罗网投掷','螺旋滑铲','伏虎霸王拳','毒雷引爆','暗街夺命锁','飞沙走石','燃火轰天炮','逆道·爆狱','逆道·幽链之界']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.065 + 0.02 * self.等级, 5)

    def 加成倍率2(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(0.92 + 0.02 * self.等级, 5)


class 归元·街霸·男技能15(归元·街霸·男主动技能):
    名称 = '天崩地裂'
    所在等级 = 50
    等级上限 = 40
    基础等级 = 12
    基础 = 35891
    成长 = 10833
    灼烧基础 = 372
    灼伤成长 = 111.5
    中毒基础 = 372
    中毒成长 = 111.5
    出血基础 = 372
    出血成长 = 111.5
    CD = 152.3


class 归元·街霸·男技能16(归元·街霸·男主动技能):
    名称 = '爆破污桶'
    所在等级 = 60
    等级上限 = 40
    基础等级 = 23
    基础 = 10613
    成长 = 1197
    基础2 = 13827
    成长2 = 1558
    CD = 21
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1

    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, x):
        if x == 0:
            self.倍率 *= 1.23
        elif x == 1:
            self.倍率 *= 1.32


class 归元·街霸·男技能17(归元·街霸·男主动技能):
    名称 = '千锁乱舞'
    所在等级 = 70
    等级上限 = 40
    基础等级 = 18
    基础 = 11905
    成长 = 1340
    出血基础 = 11905
    出血成长 = 1340
    CD = 52.5
    TP成长 = 0.10
    TP上限 = 5
    是否有护石 = 1
    护石选项 = ['魔界', '圣痕']

    def 装备护石(self, x):
        if x == 0:
            self.倍率 *= 1.2
            self.CD *= 0.91
        elif x == 1:
            self.倍率 *= 1.2*1.07
            self.CD *= 0.91

class 归元·街霸·男技能18(被动技能):
    名称 = '诡诈之道'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 11
    关联技能 = ['所有']

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)

class 归元·街霸·男技能19(归元·街霸·男主动技能):
    名称 = '暗街夺命锁'
    所在等级 = 75
    等级上限 = 40
    基础等级 = 16
    基础 = 33880
    成长 = 3820
    出血基础 = 8703
    出血成长 = 985
    CD = 42.8
    是否有护石 = 1
    护石选项 = ['圣痕']

    def 装备护石(self, x):
        self.倍率 *= 1.32

class 归元·街霸·男技能20(归元·街霸·男主动技能):
    名称 = '飞沙走石'
    所在等级 = 80
    等级上限 = 40
    基础等级 = 13
    基础 = 1427
    成长 = 161
    攻击次数 = 11
    基础2 = 8471
    成长2 = 956
    攻击次数2 = 2
    出血基础 = 13355
    出血成长 = 1511
    CD = 45
    是否有护石 = 1
    护石选项 = ['圣痕']

    def 装备护石(self, x):
        self.攻击次数 = 0
        self.攻击次数2 *= 2.8
        self.CD *= 0.9


class 归元·街霸·男技能21(归元·街霸·男主动技能):
    名称 = '燃火轰天炮'
    所在等级 = 85
    等级上限 = 40
    基础等级 = 5
    基础 = 109499.32
    成长 = 33063.86
    CD = 180.0


class 归元·街霸·男技能22(被动技能):
    名称 = '逆道·皆允'
    所在等级 = 95
    等级上限 = 40
    基础等级 = 4

    def 加成倍率(self, 武器类型):
        if self.等级 == 0:
            return 1.0
        else:
            return round(1.18 + 0.02 * self.等级, 5)


class 归元·街霸·男技能23(归元·街霸·男主动技能):
    名称 = '逆道·爆狱'
    所在等级 = 95
    等级上限 = 40
    基础等级 = 6
    基础 = 82114
    成长 = 9273
    攻击次数 = 1
    基础2 = 85125
    成长2 = 9610
    攻击次数2 = 0
    CD = 60.0


class 归元·街霸·男技能24(归元·街霸·男主动技能):
    名称 = '逆道·幽链之界'
    所在等级 = 100
    等级上限 = 40
    基础等级 = 2
    基础 = 276929
    成长 = 83592
    出血基础 = 2854
    出血成长 = 862
    中毒基础 = 2854
    中毒成长 = 862
    灼伤基础 = 2854
    灼伤成长 = 862
    CD = 290
    关联技能 = ['无']

    def 加成倍率(self, 武器类型):
        return 0.0


归元·街霸·男技能列表 = []
i = 0
while i >= 0:
    try:
        exec('归元·街霸·男技能列表.append(归元·街霸·男技能' + str(i) + '())')
        i += 1
    except:
        i = -1

归元·街霸·男技能序号 = dict()
for i in range(len(归元·街霸·男技能列表)):
    归元·街霸·男技能序号[归元·街霸·男技能列表[i].名称] = i

归元·街霸·男一觉序号 = 0
归元·街霸·男二觉序号 = 0
归元·街霸·男三觉序号 = 0
for i in 归元·街霸·男技能列表:
    if i.所在等级 == 50:
        归元·街霸·男一觉序号 = 归元·街霸·男技能序号[i.名称]
    if i.所在等级 == 85:
        归元·街霸·男二觉序号 = 归元·街霸·男技能序号[i.名称]
    if i.所在等级 == 100:
        归元·街霸·男三觉序号 = 归元·街霸·男技能序号[i.名称]

归元·街霸·男护石选项 = ['无']
for i in 归元·街霸·男技能列表:
    if i.是否有伤害 == 1 and i.是否有护石 == 1:
        归元·街霸·男护石选项.append(i.名称)

归元·街霸·男符文选项 = ['无']
for i in 归元·街霸·男技能列表:
    if i.所在等级 >= 20 and i.所在等级 <= 80 and i.所在等级 != 50 and i.是否有伤害 == 1:
        归元·街霸·男符文选项.append(i.名称)


class 归元·街霸·男角色属性(角色属性):
    实际名称 = '归元·街霸·男'
    角色 = '格斗家(男)'
    职业 = '街霸'

    武器选项 = ['爪']

    类型选择 = ['物理百分比','魔法百分比']

    类型 = '魔法百分比'
    防具类型 = '重甲'
    防具精通属性 = ['力量','智力']

    主BUFF = 1.79

    远古记忆 = 0

    def __init__(self):
        基础属性输入(self)
        self.技能栏 = deepcopy(归元·街霸·男技能列表)
        self.技能序号 = deepcopy(归元·街霸·男技能序号)


class 归元·街霸·男(角色窗口):
    def 窗口属性输入(self):
        self.初始属性 = 归元·街霸·男角色属性()
        self.角色属性A = 归元·街霸·男角色属性()
        self.角色属性B = 归元·街霸·男角色属性()
        self.一觉序号 = 归元·街霸·男一觉序号
        self.二觉序号 = 归元·街霸·男二觉序号
        self.三觉序号 = 归元·街霸·男三觉序号
        self.护石选项 = deepcopy(归元·街霸·男护石选项)
        self.符文选项 = deepcopy(归元·街霸·男符文选项)

    def 界面(self):
        super().界面()
        self.毒瓶强化 = QCheckBox('强化毒瓶投掷', self.main_frame2)
        self.毒瓶强化.resize(100, 20)
        self.毒瓶强化.move(335, 400)
        self.毒瓶强化.setStyleSheet(复选框样式)
        self.毒瓶强化.setChecked(False)

        self.毒针强化 = QCheckBox('强化毒针投掷', self.main_frame2)
        self.毒针强化.resize(100, 20)
        self.毒针强化.move(335, 430)
        self.毒针强化.setStyleSheet(复选框样式)
        self.毒针强化.setChecked(False)

        self.砖块强化 = QCheckBox('强化砖块投掷', self.main_frame2)
        self.砖块强化.resize(100, 20)
        self.砖块强化.move(335, 460)
        self.砖块强化.setStyleSheet(复选框样式)
        self.砖块强化.setChecked(False)

        self.污桶强化 = QCheckBox('强化爆破污桶', self.main_frame2)
        self.污桶强化.resize(100, 20)
        self.污桶强化.move(335, 490)
        self.污桶强化.setStyleSheet(复选框样式)
        self.污桶强化.setChecked(True)

        self.爆狱强化 = QCheckBox('强化逆道爆狱', self.main_frame2)
        self.爆狱强化.resize(100, 20)
        self.爆狱强化.move(335, 520)
        self.爆狱强化.setStyleSheet(复选框样式)
        self.爆狱强化.setChecked(True)

    def 输入属性(self, 属性, x=0):
        super().输入属性(属性, x)
        if self.毒瓶强化.isChecked():
            属性.技能栏[属性.技能序号['毒瓶投掷']].基础 = 0
            属性.技能栏[属性.技能序号['毒瓶投掷']].成长 = 0
            属性.技能栏[属性.技能序号['毒瓶投掷']].中毒基础 = 1034
            属性.技能栏[属性.技能序号['毒瓶投掷']].中毒成长 = 184
            属性.技能栏[属性.技能序号['毒瓶投掷']].灼烧基础 = 1034
            属性.技能栏[属性.技能序号['毒瓶投掷']].灼烧成长 = 184
        if self.毒针强化.isChecked():
            属性.技能栏[属性.技能序号['毒针投掷']].基础 = 976
            属性.技能栏[属性.技能序号['毒针投掷']].成长 = 92
            属性.技能栏[属性.技能序号['毒针投掷']].出血基础 = 1276
            属性.技能栏[属性.技能序号['毒针投掷']].出血成长 = 144
            属性.技能栏[属性.技能序号['毒针投掷']].感电基础 = 0
            属性.技能栏[属性.技能序号['毒针投掷']].感电成长 = 0
        if self.砖块强化.isChecked():
            属性.技能栏[属性.技能序号['砖块投掷']].攻击次数 = 0
            属性.技能栏[属性.技能序号['砖块投掷']].攻击次数2 = 1
            属性.技能栏[属性.技能序号['砖块投掷']].倍率 = 1
        if self.污桶强化.isChecked():
            属性.技能栏[属性.技能序号['爆破污桶']].攻击次数 = 0
            属性.技能栏[属性.技能序号['爆破污桶']].攻击次数2 = 1
        if self.爆狱强化.isChecked():
            属性.技能栏[属性.技能序号['逆道·爆狱']].攻击次数 = 0
            属性.技能栏[属性.技能序号['逆道·爆狱']].攻击次数2 = 1
            属性.技能栏[属性.技能序号['逆道·爆狱']].灼伤基础 = 1889 * 5
            属性.技能栏[属性.技能序号['逆道·爆狱']].灼伤成长 = 214 * 5


